const axios = require('axios');
const fs = require('fs');
const path = require('path');

// API基础URL
const API_BASE_URL = 'http://localhost:3000/api/v1';

// 生成随机用户名和邮箱，避免重复
const randomString = Math.random().toString(36).substring(2, 10);
const testUsername = `testuser_${randomString}`;
const testEmail = `testuser_${randomString}@example.com`;
const testPassword = 'Test@123456';

// 测试头像URL
const testAvatarUrl = 'https://example.com/avatars/test-avatar.jpg';

/**
 * 测试用户注册功能（带头像）
 */
async function testUserRegistrationWithAvatar() {
  console.log('开始测试用户注册功能（带头像）...');
  
  try {
    // 注册请求
    const registerResponse = await axios.post(`${API_BASE_URL}/auth/register`, {
      username: testUsername,
      email: testEmail,
      password: testPassword,
      confirmPassword: testPassword,
      nickname: '测试用户',
      avatar: testAvatarUrl
    });
    
    console.log('注册请求成功！');
    console.log('响应数据:', JSON.stringify(registerResponse.data, null, 2));
    
    // 验证头像是否被正确保存
    const responseUser = registerResponse.data.data.user;
    if (responseUser && responseUser.avatar === testAvatarUrl) {
      console.log('✓ 头像URL已成功保存！');
    } else {
      console.log('✗ 头像URL保存失败！');
      console.log('实际头像:', responseUser ? responseUser.avatar : '无头像');
    }
    
    // 尝试登录，验证用户创建成功
    console.log('\n尝试登录新创建的用户...');
    const loginResponse = await axios.post(`${API_BASE_URL}/auth/login`, {
      username: testUsername,
      password: testPassword
    });
    
    console.log('登录成功！');
    console.log('登录响应中的用户信息:', JSON.stringify(loginResponse.data.data.user, null, 2));
    
    // 验证登录响应中的头像
    const loginUser = loginResponse.data.data.user;
    if (loginUser && loginUser.avatar === testAvatarUrl) {
      console.log('✓ 登录响应中头像URL正确！');
    } else {
      console.log('✗ 登录响应中头像URL不正确！');
    }
    
    return {
      success: true,
      message: '用户注册（带头像）功能测试通过',
      username: testUsername,
      email: testEmail,
      avatar: testAvatarUrl
    };
  } catch (error) {
    console.error('测试失败！');
    if (error.response) {
      console.error('错误状态码:', error.response.status);
      console.error('错误响应:', JSON.stringify(error.response.data, null, 2));
    } else if (error.request) {
      console.error('没有收到响应:', error.request);
    } else {
      console.error('请求错误:', error.message);
    }
    
    return {
      success: false,
      message: '用户注册（带头像）功能测试失败',
      error: error.response ? error.response.data : error.message
    };
  }
}

/**
 * 测试不带头像的用户注册（确保兼容性）
 */
async function testUserRegistrationWithoutAvatar() {
  console.log('\n开始测试用户注册功能（不带头像）...');
  
  try {
    // 生成新的测试账号
    const randomString2 = Math.random().toString(36).substring(2, 10);
    const testUsername2 = `testuser_${randomString2}`;
    const testEmail2 = `testuser_${randomString2}@example.com`;
    
    // 注册请求（不带头像）
    const registerResponse = await axios.post(`${API_BASE_URL}/auth/register`, {
      username: testUsername2,
      email: testEmail2,
      password: testPassword,
      confirmPassword: testPassword,
      nickname: '测试用户2'
    });
    
    console.log('不带头像的注册请求成功！');
    
    // 验证头像字段是否为null或undefined
    const responseUser = registerResponse.data.data.user;
    if (responseUser && (responseUser.avatar === null || responseUser.avatar === undefined)) {
      console.log('✓ 不带头像的注册正常，头像字段为null！');
    } else {
      console.log('✗ 不带头像的注册异常，头像字段不为null！');
    }
    
    return {
      success: true,
      message: '用户注册（不带头像）功能测试通过',
      username: testUsername2,
      email: testEmail2
    };
  } catch (error) {
    console.error('不带头像的注册测试失败！');
    if (error.response) {
      console.error('错误状态码:', error.response.status);
      console.error('错误响应:', JSON.stringify(error.response.data, null, 2));
    }
    
    return {
      success: false,
      message: '用户注册（不带头像）功能测试失败',
      error: error.response ? error.response.data : error.message
    };
  }
}

/**
 * 运行所有测试
 */
async function runAllTests() {
  console.log('============================================');
  console.log('用户注册功能（带头像）测试脚本');
  console.log('============================================');
  
  const results = {
    timestamp: new Date().toISOString(),
    withAvatar: await testUserRegistrationWithAvatar(),
    withoutAvatar: await testUserRegistrationWithoutAvatar()
  };
  
  // 保存测试结果到文件
  const resultsFile = path.join(__dirname, 'test_user_avatar_results.md');
  const resultsMarkdown = `# 用户注册功能（带头像）测试结果

## 测试时间
${results.timestamp}

## 测试结果

### 带头像注册测试
- **状态**: ${results.withAvatar.success ? '通过' : '失败'}
- **消息**: ${results.withAvatar.message}
- **用户名**: ${results.withAvatar.username || 'N/A'}
- **邮箱**: ${results.withAvatar.email || 'N/A'}
- **头像URL**: ${results.withAvatar.avatar || 'N/A'}

### 不带头像注册测试
- **状态**: ${results.withoutAvatar.success ? '通过' : '失败'}
- **消息**: ${results.withoutAvatar.message}
- **用户名**: ${results.withoutAvatar.username || 'N/A'}
- **邮箱**: ${results.withoutAvatar.email || 'N/A'}

## 详细错误信息
${!results.withAvatar.success ? `
### 带头像注册错误
${JSON.stringify(results.withAvatar.error, null, 2)}
` : ''}
${!results.withoutAvatar.success ? `
### 不带头像注册错误
${JSON.stringify(results.withoutAvatar.error, null, 2)}
` : ''}
`;
  
  fs.writeFileSync(resultsFile, resultsMarkdown);
  console.log(`\n测试结果已保存到: ${resultsFile}`);
  
  // 总结
  console.log('\n============================================');
  console.log('测试总结:');
  console.log(`- 带头像注册: ${results.withAvatar.success ? '✅ 通过' : '❌ 失败'}`);
  console.log(`- 不带头像注册: ${results.withoutAvatar.success ? '✅ 通过' : '❌ 失败'}`);
  
  if (results.withAvatar.success && results.withoutAvatar.success) {
    console.log('\n🎉 所有测试通过！用户注册功能（支持头像）工作正常。');
  } else {
    console.log('\n❌ 部分测试失败，请检查错误信息并修复问题。');
  }
  console.log('============================================');
}

// 运行测试
runAllTests().catch(error => {
  console.error('测试脚本执行失败:', error);
});